package chat.tools;

import javax.swing.*;

/**
 * 计时器线程类
 *
 * #1 未服务器或客户端显示启动服务时长和连接时长
 *
 * @author 谈笑、
 * @dateTime 2020/10/19 1:48
 */
public class TimerTools implements Runnable {

	// 计时标签
	private JLabel jLabel;

	// 显示的文字
	private String text;

	// 线程运行状态
	private boolean isTimerToolsRun = true;

	// 秒、分、时
	private int s = 0, m = 0, H = 0;

	// 秒、分、时
	private String ss, mm, HH;

	public TimerTools() {}

	public TimerTools(JLabel jLabel, String text) {
		this.jLabel = jLabel;
		this.text = text;
	}

	// 同步线程变量，避免无法终止线程和结束计时。
	public synchronized void setTimerToolsRun() {
		this.isTimerToolsRun = false;
	}

	@Override
	public void run() {
		try {
			// 服务器或客户端在运行才会计时
			while (this.isTimerToolsRun) {

				// 避免服务器或客户端已经停止运行以后还会执行完循环
				while (this.s < 60 && this.isTimerToolsRun) {

					// 秒、分、时位数不是两位数时，添加一个前导0。
					this.ss = this.s < 10? "0" + this.s : "" + this.s;
					this.mm = this.m < 10? "0" + this.m : "" + this.m;
					this.HH = this.H < 10? "0" + this.H : "" + this.H;

					// 加一秒
					this.s += 1;

					// 设置显示标签的文字
					this.jLabel.setText(this.text + "：" + this.HH + ":" + this.mm + ":" + this.ss);

					// 延时一秒
					Thread.sleep(1000);
				}

				// 清空秒数、分数加一。
				this.s = 0;
				this.m += 1;

				// 满60分钟
				if(this.m == 60) {
					// 清空分数、时数加一。
					this.m = 0;
					this.H += 1;
				}
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}